📜 [專欄新文章] Solidity Weekly #7
✍️ mingderwang
📥 歡迎投稿: https://medium.com/taipei-ethereum-meetup #徵技術分享文 #使用心得 #教學文 #medium
怎麼用 revert, require, assert 才對?
由於 solidity 還在不斷的演進,有些文法或保留字,慢慢的淘汰,改用其他比較好的方法來寫。
最早我們會用 throw 保留字, 來跳開不接受的程式判斷如下:
if(msg.sender != owner) { throw; }
現在, 官方建議改用
if(msg.sender != owner) { revert("不是 Owner 本人"); }
或乾脆直接用 require 來做判斷與錯誤訊息顯示如下:
require(msg.sender == owner, "不是 Owner 本人")
雖然也可以用 assert 如下,但最好不要這樣用。原因 1. assert 會把所有 gas 用完,require 或 revert 會把沒用完的 gas 還給你。2. assert 通常用來做 internal error 的檢查,顧名思義 ASSERT 是用來做程式錯誤發生時警告用的。當它發生或被分析工具找到漏洞,就是 bugs,ㄧ定要修改的 bugs 了。
assert(msg.sender == owner) // 不建議這樣用
最後,又如何判斷用 require 還是 revert ? 很簡單,平常盡量用 require,在判斷邏輯太複雜時,用 revert 比 require 簡單時,才用 revert。
*適用版本 Solidity ^0.4.10 或以上
Solidity Weekly #7 was originally published in Taipei Ethereum Meetup on Medium, where people are continuing the conversation by highlighting and responding to this story.
👏 歡迎轉載分享鼓掌